import router from './router'
import store from './store'
import { Message } from 'element-ui'

//引入nprogress进度条
import NProgress from 'nprogress' 
//引入nprogress进度条的样式
import 'nprogress/nprogress.css' 

// 从cookie 中 获取 token
import { getToken ,getId} from '@/utils/auth' 
// 获取页面标题
import getPageTitle from '@/utils/get-page-title'

// NProgress 配置
NProgress.configure({ showSpinner: false }) 

// 不需要重定向的白名单
const whiteList = ['/login','/login/forget'] 

// router.beforeEach 注册一个全局前置 路由守卫
router.beforeEach(async(to, from, next) => {
  //  开启进度条
  NProgress.start()
  // 设置页面title
  document.title = getPageTitle(to.meta.title)
  //  获取是否有token
  // const hasToken = getToken()
  const hasToken = getToken()
  const id = getId()

  if (hasToken) {
    if (to.path === '/login') {
      // 如果已经就是要去login了，就不需要拦截了
      next({ path: '/' })
      //结束进度条
      NProgress.done()
    } else {
      // 是否获取了用户信息
      const hasGetUserInfo = store.getters.avatar
      if (hasGetUserInfo) {
        next()
      } else {
          const res = await store.dispatch("user/getUserInfo",id)
          if(res == 1) {
            next()
          }else{
            // 移除 token 去重新登录
            await store.dispatch('user/resetToken')
            Message.error('获取用户信息失败，请重新登录')
            next(`/login?redirect=${to.path}`)
            NProgress.done()  
          }

      }
    }
  } else {
    
    // 没有 token
    console.log('全局路由前置守卫  没有token ');
    if (whiteList.indexOf(to.path) !== -1) {
      // 前往路径在白名单上，直接放行
      next()
    } else {
      // 其他的页面 重定向到登录
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})


// router..afterEach 注册一个全局后置 路由守卫
router.afterEach(() => {
  //  关闭进度条
  NProgress.done()
})
